package com.wjt.homestayms.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wjt.homestayms.common.Result;
import com.wjt.homestayms.mapper.StoreMapper;
import com.wjt.homestayms.common.PageRequest;
import com.wjt.homestayms.common.PageResult;
import com.wjt.homestayms.pojo.Store;
import com.wjt.homestayms.service.IStoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Service
public class StoreServiceImpl implements IStoreService {

    @Autowired
    StoreMapper storeMapper;


    @Override
    public Result<List<Store>> getAll() {
        LambdaQueryWrapper<Store> queryWrapper = new LambdaQueryWrapper();
        List<Store> list = storeMapper.selectList(queryWrapper);
        return Result.ok(list);
    }

    //根据前端传过来的的store对象信息，加到数据库中。并返回插入行数。
    @Override
    public boolean addStore(Store store) {

        //先从数据库查询是否有同名的门店。如果有，便不给插入，返回false;如果没有，便返回true;
        String sName = store.getsName();
        List<Store> list = storeMapper.getStoreByName(sName);
        //如果list的长度大于0，表示数据库有同名的门店存在，不给添加。
        if (list.size() > 0) {
            return false;
        } else {
            Integer row = storeMapper.addStore(store);
            if (row > 0) {
                return true;
            } else {
                return false;
            }
        }
    }

    //根据前端传过来的的store对象信息，修改数据库信息。并返回一个布尔值。
    @Override
    public boolean updateStoreInfo(Store store) {

        Boolean falg = false;
        //先从数据库查询是否有数据。如果有，才执行修改，并返回true，如果没有，返回false。
        List<Store> list = storeMapper.getStoreListBySid(store.getsId());
        if (list.size() > 0) {
            //修改成功，则返回true，失败返回false.
            falg = storeMapper.updateStoreInfo(store);
        }
        return falg;
    }

    //根据门店id删除记录，并返回删除行数。
    @Override
    public boolean deleteStoreBySid(Integer sId) {

        //先从数据库查询是否有数据。如果有，才执行删除，并返回true，如果没有，返回false。
        List<Store> list = storeMapper.getStoreListBySid(sId);
        if (list != null) {
            Integer row = storeMapper.deleteStoreBySid(sId);
            if (row > 0) {
                return true;
            }
        }
        //这时判断数据库没有这条数据，不执行删除，返回false；
        return false;
    }


    //根据用户id查询Store门店的总数。返回门店总数。
    @Override
    public PageResult getResultPage(PageRequest pageRequest, Integer id) {
        PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());
        List<Store> list = storeMapper.getStoreListById(id);
        return getPageResult(list);
    }

    @Override
    public PageResult getResultPageBySid(PageRequest pageRequest, Integer sId) {
        PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());
        List<Store> list = storeMapper.getStoreListBySid(sId);
        return getPageResult(list);
    }

    @Override
    public PageResult getResultPage(PageRequest pageRequest, String sName) {
        PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize());
        List<Store> list = storeMapper.getStoreByName(sName);
        return getPageResult(list);
    }

    //你这个分页不应该这么写
    private PageResult getPageResult(List<Store> list) {
        //传入的list长度大于0，表示list中有数据存在。

        PageInfo<Store> pageInfo = PageInfo.of(list);
        PageResult page = new PageResult();
        //获取数据记录总数
        page.setTotal(pageInfo.getTotal());
        //获取当前页面页码
        page.setPageNum(pageInfo.getPageNum());
        //获取当前页面数据的个数
        page.setPageSize(pageInfo.getPageSize());
        //获取页面总数
        page.setTotalPage(pageInfo.getPages());
        //封装页面内容
        Iterator<Store> iterator = pageInfo.getList().iterator();
        List<Object> content = new ArrayList<>();
        while (iterator.hasNext()) {
            Store store = iterator.next();
            content.add(store);
        }
        page.setContent(content);
        //封装完成返回PageResult对象
        return page;
    }

    @Override
    public String getStoreName(Integer sId) {
        String storeName = storeMapper.getStoreName(sId);
        return storeName;
    }

    @Override
    public Store getStore(Integer sId) {
        Store store = storeMapper.getStore(sId);
        return store;
    }

    @Override
    public List<Store> getStores(Integer id) {
        List<Store> list = storeMapper.getStoreListById(id);
        return list;
    }
}
